
import controle.Ninef;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.AccessException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author gean
 */
public class Main {

    public static void main(String args[]) {
        try {
            Ninef sistema;
            sistema = new Ninef();
            String input;
            String[] inputs;
            Scanner scanner = new Scanner(System.in);

            System.out.println("");
            while (true) {
                System.out.print("Ninef/" + sistema.getDiretorio() + "$ ");

                input = scanner.nextLine();
                inputs = input.split(" ");
                input = inputs[0].toLowerCase();
                if ("exit".equals(input)) {
                    break;
                }
                if ("ls".equals(input)) {
                    System.out.println(sistema.listar());
                    continue;
                }
                if ("format".equals(input)) {
                    try {
                        sistema.formata(Integer.parseInt(inputs[1]));
                        System.out.println("O sistema de arquivos foi formatado com sucesso");
                    } catch (Exception ex) {
                        System.out.println("Algum erro ocorreu e o sistema não pode ser formatado");
                    }
                    continue;
                }
                if ("prt".equals(input)) {
                    inputs[1] = inputs[1].toLowerCase();
                    if ("sb".equals(inputs[1])) {
                        System.out.println(sistema.getSuperBloco());
                        continue;
                    }
                    if ("ninis".equals(inputs[1])) {
                        try {
                            System.out.println(sistema.getNinis(Integer.parseInt(inputs[2])));
                            continue;
                        } catch (Exception ex) {
                        }
                    }
                    if ("bmninis".equals(inputs[1])) {
                        System.out.println(sistema.getBitmapNinis());
                        continue;
                    }
                    if ("bmdados".equals(inputs[1])) {
                        System.out.println(sistema.getBitmapDados());
                        continue;
                    }
                    if ("bloco".equals(inputs[1])) {
                        try {
                            System.out.println(sistema.getBloco(Integer.parseInt(inputs[2])));
                            continue;
                        } catch (Exception ex) {
                        }
                    }
                }
                if ("mkdir".equals(input)) {
                    try {
                        sistema.novaPasta(inputs[1]);
                    } catch (Exception ex) {
                    }
                    continue;
                }
                if ("cd".equals(input)) {
                    try {
                        sistema.abrirPasta(inputs[1]);
                        continue;
                    } catch (Exception ex) {
                        if (ex instanceof IndexOutOfBoundsException) {
                            System.out.println("Não existe uma pasta com este nome");
                            continue;
                        }
                        if (ex instanceof IllegalAccessException ) {
                            System.out.println("A string informada corresponde a um arquivo, não a uma pasta");
                            continue;
                        }
                    }
                }
                if ("copy".equals(input)) {
                    try {
                        sistema.copiarparaNinef(inputs[1]);
                        continue;
                    } catch (Exception ex) {
                        if (ex instanceof FileNotFoundException) {
                            System.out.println("O arquivo de origem não existe");
                            continue;
                        }
                    }
                }
                if ("copyto".equals(input)) {
                    try {
                        sistema.copiardoNinef(inputs[1], inputs[2]);
                        continue;
                    } catch (Exception ex) {
                        if ( ex instanceof FileNotFoundException ) {
                            System.out.println("O arquivo de origem não existe");
                            continue;
                        }
                        if ( ex instanceof StringIndexOutOfBoundsException ) {
                            System.out.println("O arquivo de destino já existe");
                            continue;
                        }
                        if ( ex instanceof IllegalAccessException ) {
                            System.out.println("O sistema de arquivos não permite a cópia de uma pasta");
                            continue;
                        }
                    }
                }
                System.out.println("Este comando não foi reconhecido");
            }
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}